/* 
 * File:   TablaTransiciones.cpp
 * Author: Dianita
 * 
 * Created on 3 de noviembre de 2013, 05:37 PM
 */

#include <iostream>

#include "TablaTransiciones.h"
#include "Utiles.h"

TablaTransiciones::TablaTransiciones() {
}

TablaTransiciones::TablaTransiciones(list<Estado> estados, list<Letra> alfabeto, list<Separador> separadores, list<Transicion> transacciones) {
    this->estados = estados;
    this->alfabeto = alfabeto;
    this->separadores = separadores;
    this->transiciones = transacciones;
}

void TablaTransiciones::setEstados(list<Estado> estados) {
    this->estados = estados;
}

list<Estado> TablaTransiciones::getEstados() {
    return this->estados;
}

void TablaTransiciones::setAlfabeto(list<Letra> alfabeto) {
    this->alfabeto = alfabeto;
}

list<Letra> TablaTransiciones::getAlfabeto() {
    return this->alfabeto;
}

void TablaTransiciones::setSeparadores(list<Separador> separadores) {
    this->separadores = separadores;
}

list<Separador> TablaTransiciones::getSeparadores() {
    return this->separadores;
}

void TablaTransiciones::setTransiciones(list<Transicion> transiciones) {
    this->transiciones = transiciones;
}

list<Transicion> TablaTransiciones::getTransiciones() {
    return this->transiciones;
}

void TablaTransiciones::setTamanioTablaTransicion(int filas, int columnas) {
    //this->filas = filas;
    //this->columnas = columnas;
}

void TablaTransiciones::construirMatriz(int filas, int columnas) {
    Utiles utiles;
    this->tamanioFilas = filas;
    this->tamanioColumnas = columnas;
    int contador = 1;
    int contadorLetrasFilas = this->alfabeto.size();
    int contadorSeparadores = 0;


    for (int i = 0; i <= (filas - 1); i++) {
        for (int j = 0; j <= (columnas - 1); j++) {
            if ((i == 0 && j == 0)) {
                tablaTransiciones[i][j] = "*";
            } else {
                if ((i == 1)) {
                    if (j == 0) {
                        tablaTransiciones[i][j] = "*";
                    } else {
                        if (contadorLetrasFilas != 0) {
                            tablaTransiciones[i][j] = utiles.obtenerLetra(alfabeto, j - 1).getNombre();
                            contadorLetrasFilas--;
                        } else {
                            tablaTransiciones[i][j] = utiles.obtenerSeparador(separadores, contadorSeparadores).getNombre();
                            contadorSeparadores++;
                        }
                    }
                } else {
                    if (i == 0) {
                        tablaTransiciones[i][j] = utiles.conversorInt_String(contador);
                        contador++;
                    } else {
                        if (i > 1) {
                            Estado estadoInicialAux; 
                            if(j==0){
                                estadoInicialAux = utiles.obtenerEstado(estados,i-2);
                                tablaTransiciones[i][j] = estadoInicialAux.getNombre();
                            }else{
                                //cout << " --este" +utiles.obtenerEstadoFinal(transiciones,estadoInicialAux,utiles.obtenerLetra(alfabeto,j-1)).getNombre() << endl;
                                tablaTransiciones[i][j] = utiles.obtenerEstadoFinal(transiciones,utiles.obtenerEstado(estados,i-2),utiles.obtenerLetra(alfabeto,j-1)).getNombre();
                            }
//                            tablaTransiciones[i][j] = ".";
                        }
                    }
                }
            }
            cout << tablaTransiciones[i][j] + " ";
        }
        cout << "" << endl;
        //if(i==19){
        //            cout << "entra";
        //      }
    }
}

void TablaTransiciones::imprimirMatriz() {
    for (int i = 0; i < tamanioFilas; i++) {
        for (int j = 0; j < tamanioColumnas; j++) {
            cout << this->tablaTransiciones[i][j] + " ";
        }
        cout << "" << endl;
    }

    cout << tablaTransiciones[1][16] + "esto es " << endl;
}